
package concesionaria;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.ConsoleHandler;


/**
 *
 * @author Guillermo
 * @author Matias
 */
public class EntregaDeAuto {

    private String tipoEntrega;
    private String metodoDePago;
    private String fechaEntrega;
    private InstAuto _instauto;
    private int _cliente;
    private int _vendedor;
    private int _planDePago;
    private Vector _promociones = new Vector();
    public boolean inicializado = false;

    public EntregaDeAuto() {
    }

    public boolean InicializarPlan(int tipoEnt, int empleado, int insc, String chasis, String motor, String color, String patente) {
        if (inicializado == false) {
            if (tipoEnt == 0 || insc == 0 || empleado == 0) {
                return false;
            }
            if (tipoEnt == 1) {
                tipoEntrega = "Licitacion";
            } else if (tipoEnt == 2) {
                tipoEntrega = "Sorteo";
            } else if(tipoEnt==3){
                tipoEntrega = "Entrega";
            }else{
                return false;
            }
            this.metodoDePago = "Plan";

            this._instauto = new InstAuto();

            setFechaEntrega();

            this._vendedor = empleado;
            try {
                String SQL = "select i.`ID_cli` cliente, i.`ID_plan` plan, `ID_auto` auto from inscripcion i where id = " + insc;
                Statement stmt;
                stmt = DBCon.getConexion().createStatement();
                ResultSet rs;
                rs = stmt.executeQuery(SQL);
                rs.next();
                this._cliente = rs.getInt("cliente");
                this._planDePago = rs.getInt("plan");
                this._instauto.Inicializar(rs.getInt("auto"), patente, chasis, motor, color);


            } catch (SQLException e) {
                System.out.print("Error en SQL: " + e.getMessage());
            }
        } else {
            return false;
        }
        inicializado = true;
        return true;
    }

    public boolean InicializarCtdo(int empleado, int cliente, int auto, String chasis, String motor, String color, String patente) {
        if (inicializado) {
            return false;
        }
        if (cliente == 0 || auto == 0 || empleado == 0) {
            return false;
        }
        tipoEntrega = "Entrega";

        this.metodoDePago = "Ctdo";

        this._instauto = new InstAuto();
        this._planDePago = 0;

        this._vendedor = empleado;

        this._cliente = cliente;
        this._instauto.Inicializar(auto, patente, chasis, motor, color);
        setFechaEntrega();
        inicializado = true;
        return true;
    }

    public boolean AgregarPromocion(int promo) {
        _promociones.addElement(promo);
        return true;
    }

    public boolean AltaEntrega() {
        int id = 0;
        int id_iauto = _instauto.AltaIAuto();
        try {
            if (id_iauto == 0 || id_iauto == -1) {
                return false;
            }
            String SQL1 = "select count(*) from entrega_auto";
            Statement stmt;
            stmt = DBCon.getConexion().createStatement();
            ResultSet rs = stmt.executeQuery(SQL1);
            while (rs.next()) {
                id = rs.getInt(1) + 1;
            }
            id++;
            String SQL = "INSERT INTO concesionaria.entrega_auto (id_cli, id_emp, id_iauto, id_plan, tipo_entrega, metodo_pago, fecha_entrega, id)"
                    + "VALUES ('" + _cliente + "', '" + _vendedor + "', '" + id_iauto + "', '" + _planDePago + "', '" + tipoEntrega + "', '"
                    + this.metodoDePago + "', '" + this.fechaEntrega + "', " + id + ")";
            stmt = DBCon.getConexion().createStatement();
            stmt.executeUpdate(SQL);
            for (int i = 0; i < _promociones.size(); i++) {
                String SQL2 = "INSERT INTO concesionaria.ent_prom (`ID_ent`, `ID_promo`) "
                        + "VALUES (" + id + ", " + _promociones.elementAt(i) + ")";
                stmt = DBCon.getConexion().createStatement();
                stmt.executeUpdate(SQL2);
            }
        } catch (SQLException e1) {
            System.out.println(e1.getMessage());
            return false;
        }
        return true;
    }
    public Promocion[] getPromos()
    {
        Promocion[] promociones;
        int cant=0, i=0;
        try {
            String SQL1 = "select count(*) from promo_plan p where p.ID_plan ="+_planDePago;
            Statement stmt;
            stmt = DBCon.getConexion().createStatement();
            ResultSet rs = stmt.executeQuery(SQL1);
            while (rs.next()) {
                cant = rs.getInt(1) + 1;
            }
            promociones= new Promocion[cant];
            String SQL2 = "select r.id, r.descripcion from promo_plan p , promocion r where p.ID_promo=r.id AND p.ID_plan="+_planDePago;
            stmt = DBCon.getConexion().createStatement();
            ResultSet rs2 = stmt.executeQuery(SQL2);
            while (rs2.next()) {
                promociones[i]=new Promocion();
                promociones[i].setDescripcion(rs2.getString("descripcion"));
                promociones[i].setId(rs2.getInt("id"));
                i++;
            }
            return promociones;
            
        } catch (SQLException e1) {
            System.out.println(e1.getMessage());
            promociones= new Promocion[1];
            return promociones;
        }
        
    }
    public boolean setFechaEntrega() {
        java.util.Date fechaActual = new java.util.Date();
        SimpleDateFormat formato = new SimpleDateFormat("yyyy'-'MM'-'dd");
        String cadenaFecha = formato.format(fechaActual);
        this.fechaEntrega = cadenaFecha;
        return true;
    }

    public void setTipoEntrega(String tipoEntrega) {
        this.tipoEntrega = tipoEntrega;
    }

    public String getTipoEntrega() {
        return this.tipoEntrega;
    }

    public void setMetodoDePago(String metodoDePago) {
        this.metodoDePago = metodoDePago;
    }

    public String getMetodoDePago() {
        return this.metodoDePago;
    }

    public String getFechaEntrega() {
        return this.fechaEntrega;
    }
}
